﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using bolsatrabajo.Persistencia;
using bolsatrabajo.Dominio.NHIBERNATE;

namespace bolsatrabajo.Negocio
{
    public class ServPostular
    {
        public IPostulanteNH PostulanteNH { get; set; }
        public IAvisoNH AvisoNH { get; set; }
        public IPostulacionNH PostulacionNH { get; set; }
        public IOfertanteNH OfertanteNH { get; set; }

        public Postulacion Postular(String Correo, Postulacion postulacion)
        {
            Postulante postulante = PostulanteNH.Obtener(Correo);
            postulacion.Postulante = postulante;
            return PostulacionNH.Crear(postulacion);
        }

        public Postulacion ConsultarPostulacion(Int32 idpostulacion)
        {
            return PostulacionNH.Obtener(idpostulacion);
        }

        public Postulacion ModificarPostulacion(Postulacion postulacion)
        {
            Postulacion existepostulacion = this.ConsultarPostulacion(postulacion.Id_Postulacion);
            if (existepostulacion == null)
                throw new Exception("Postulacion no existe");
            return PostulacionNH.Modificar(postulacion);
        }

        public void EliminarPostulacion(Postulacion postulacion)
        {
            Postulacion existepostulacion = this.ConsultarPostulacion(postulacion.Id_Postulacion);
            if (existepostulacion == null)
                throw new Exception("Postulacion no existe");
            PostulacionNH.Eliminar(postulacion);
        }




        public ICollection<Postulacion> PostulacionesxPostulante(String correopostulante)
        {
            if (correopostulante == null || String.Empty.Equals(correopostulante))
                throw new Exception("Correo de Postulante no válido");
            Postulante postulanteExistente = PostulanteNH.Obtener(correopostulante);
            if (postulanteExistente == null)
                throw new Exception("Postulante no registrado");
            return PostulacionNH.ListarPostulacionesxPostulante(correopostulante);
        }

        public ICollection<Postulacion> PostulacionesxAviso(Int32 xidaviso)
        {
            if (xidaviso == 0)
                throw new Exception("Id de Aviso no válido");
            Aviso avisoExistente = AvisoNH.Obtener(xidaviso);
            if (avisoExistente == null)
                throw new Exception("Aviso no se encuentra");
            return PostulacionNH.ListarPostulacionesxAviso(xidaviso);
        }
        public Postulacion SeleccionarGanador(Int32 idaviso, Int32 idpostulacion)
        {
            if (idaviso == 0 || idpostulacion == 0)
                throw new Exception("Id de Aviso no valido");
            Postulacion postulacionGanadora = PostulacionNH.ConsultarPostulacionGanadoraxAviso(idaviso);
            if (postulacionGanadora != null)
                throw new Exception("Ya existe ganador para este Aviso");
            Postulacion postulacionAModificar = PostulacionNH.ListarxAvisosyPostulacion(idaviso, idpostulacion);
            if (postulacionAModificar == null)
                throw new Exception("Postulacion no encontrada");
            if (postulacionAModificar.Seleccionado == true)
                throw new Exception("Ya fue seleccionado como ganador");
            postulacionAModificar.Seleccionado = true;
            return PostulacionNH.Modificar(postulacionAModificar);
        }
    }
}